GitHub 的介绍
1. Git 和 GitHub 的关系
- Git 是代码历史版本控制器
- GitHub 是代码托管中心
2. 示意图

Github 界面介绍
1. 代码库

2. 任务管理
- 任务管理用于记录和汇总项目的问题
- 任务管理的界面

- 新增问题

- 问题详情页

2. Wiki
- Wiki 相当于维基百科,用于编写项目的文档(即: 有什么功能,用什么技术实现的)

创建远程库


本地库操作远程库地址的命令
1. 在本地库创建远程库的地址别名
- 命令: git remote add 自定义远程库网址别名 远程库HTTPS网址/远程库的SSH地址
git remote add origin https://github.com/toKevin/django_project.git # 一般都会使用 origin 作为别名名称,算是约定俗成
2. 修改指定别名的远程库地址
- 命令: git remote set-url 自定义远程库网址别名 远程库HTTPS网址/远程库的SSH地址
git remote set-url origin https://github.com/toKevin/django_project.git
3.删除指定别名的远程库地址
- 命令: git remote remove 自定义远程库网址别名
git remote remove origin
4.查看所有在本地库的远程库地址别名
git remote
5.查看所有在本地库的远程库地址别名和对应的远程库地址
git remote -v
将本地库推送到远程库中
1. 在本地库创建远程库的地址别名
- 作用: 方便对远程库的地址进行操作,不用每次操作都使用远程库的详细地址,而是直接使用别名即可
- 通俗理解: 使用某个别名代表远程库的地址
- 命令: git remote add 自定义远程库网址别名 远程库HTTPS网址
git remote add origin https://github.com/toKevin/django_project.git # 一般都会使用 origin 作为别名名称,算是约定俗成
2. 查看所创建远程库网址的别名
git remote -v

3. 将本地库的某个分支推送到远程库
- 命令: git push 远程库网址的别名 分支
git push origin master
- 如果太久没登录或者没登录过那么就会弹出一个登陆界面

- 推送成功


免密登陆
1. 为什么需要免密登陆?
- 在一些旧系统或者旧版本的git上每次推送都需要输入密码
2. 方式一: 通过修改远程库的地址
- 修改远程库地址
https://用户名:密码@github.com/Yeung-Kevin/django_project.git
- 创建远程库地址别名
- 命令: git remote add 自定义远程库网址别名 远程库HTTPS网址
git remote add origin https://用户名:密码@github.com/Yeung-Kevin/django_project.git
3. 方式二: 通过配置 SSH
- 生成公钥和私钥
ssh-keygen.exe

- 查看公钥
cat /c/Users/Mr.\ Yeung/.ssh/id_rsa.pub
# 等同于
cat /c/Users/'Mr. Yeung'/.ssh/id_rsa.pub

- 将公钥添加到 GitHub 的配置中





- 使用 SSH 网址创建远程库的地址别名


- 创建远程库地址别名
- 命令: git remote add 自定义远程库网址别名 远程库SSH网址
git remote add origin-ssh git@github.com:Yeung-Kevin/django_project.git
拉取远程库
1. 什么时候使用拉取或克隆?
- pull(拉取): 当本地库和远程库是同一个库的时候,且需要将远程库的内容更新到本地库时(通俗理解: 更新远程库的内容到本地库),就要使用 pull
- clone(克隆): 当本地主机没有如何库的时候,就要使用 clone
2. 拉取远程库的内容到本地库
- 方式一: 使用 fetch 和 merge 进行拉取合并
- 好处: 可以先从远程库现在到本地库看一下是否有误在进行合并
- 将远程库分支下载到本地(此时未进行合并)
- 命令: git fetch 远程库网址的别名 分支
git fetch origin master

- 切换分支查看从远程库下载的东西是否有误(注:斜杠)
- 命令: git checkout 远程库网址的别名/分支
git checkout origin/master

- 合并分支(此时已经完成了拉取工作)
- 注意: 在合并分支之前必须切换到需要合并的分支上(如果没有执行上一步那么可以忽略此步骤)
git checkout master

- 命令: git merge 远程库网址的别名/分支
git merge origin/master

- 方式二: pull 进行拉取合并【推荐】
- pull 相当于 fetch 和 merge 的结合 ( pull = fetch + merge )
- 命令: git pull 远程库网址的别名 分支
git pull origin master

3. 拉取远程库的问题
- 当在拉取远程库内容的时候出现以下内容,就说明本地库的内容与远程库的内容不一致(即: 在你不知情的情况下有人往远程库推送了新的内容,使得本地库的历史版本低于远程库的历史版本)

- 解决办法: 编写备注内容后保存 或 直接进行保存

克隆远程库到本地
1. 什么时候使用拉取或克隆?
- pull(拉取): 当本地库和远程库是同一个库的时候,且需要将远程库的内容更新到本地库时,就要使用 pull
- clone(克隆): 当本地主机没有如何库的时候,就要使用 clone
2. 克隆的效果
- 完整的把远程库下载到本地
- 自动创建 origin 远程库地址别名
- 初始化本地库
3. 在任意目录下创建一个文件夹,用于克隆远程库到本地

4. 克隆远程库到本地
- 复制远程库地址

- 命令: git clone 远程库地址
git clone https://github.com/toKevin/django_project.git

公司内的协作操作
协作示意图

加入团队方式一:远程库单独邀请
缺点: 如果远程库过多,那么每个远程库都要邀请一次
1. 邀请员工到项目经理的远程库的团队中



2. 员工接收邀请
- 方式一: 以邮件的形式接收邀请
- 当项目经理发送邀请后,员工的github所绑定的邮箱会收到一封邀请信

- 方式二: 以网址的形式接收邀请
- 项目经理复制邀请链接给员工

- 登陆员工账号打开项目经理给的邀请链接

加入团队方式二:组织
1. 组织的作用
- 多个人可以开发或管理多个项目(即: 如果有多个员工并且有多个远程库,那么就不用每个远程库都要邀请一次员工)
3. 创查看你所创建的组织
- 方式一:
- 在个人中心中查看

- 方式二:
- 在个人设置中查看


2. 创建组织



3. 邀请组织成员




4. 接收邀请
- 方式一: 邮件接收邀请

- 方式二: 直接访问组织地址,就会显示邀请提示


5. 设置成员权限

协作流程
1. 员工克隆项目经理的远程库
- 命令: git clone 远程库地址
git clone https://github.com/toKevin/django_project.git

2. 创建员工分支,并切换到员工分支下编写所需要的功能
- 创建员工分支
- 命令: git branch 新的分支名
git branch Yeung
- 切换到员工分支下
- 命令: git checkout 分支名
git checkout Yeung
3. 将今日以编写好的功能(即: 员工分支)推送到远程库中
- 推送前提: 员工的账号要在项目经理远程库或组织(并且,员工在组织的权限为可拉取和推送)中
- 如果你不在该远程库的团队中是无法推送到该远程库的

- 命令: git push 远程库网址的别名 分支
git push origin Yeung
3. 从远程库中拉取昨日编写好的功能(即: 员工分支)继续编写
- 拉取前提: 当远程库中的员工分支被别人修改过,那么就要重新拉取,如果没有被修改,那么可以直接忽略此步骤
- 注意: 在这里我们就当作员工分支被人重新推送过,此时远程库的员工分支和自己本地的员工分支是不一致的,在日常开发中每个员工都会有单独的员工分支,一般别人不会修改远程库中属于你的员工分支
- 命令: git pull 远程库网址的别名 分支
git pull origin Yeung

3. 将员工分支合并到 review 分支上(不是必要的,看公司需求)
- 注意: 分支合并最好 1-3 天合并一次,时间拖得越久,冲突文件就会越多
- 合并前提: 当员工分支的功能编写好后,将员工分支合并到 review 分支上让组长或项目经理查看代码是否有问题
- 拉取远程库的 review 分支
- 保证 review 分支的内容是最新的
- 命令: git pull 远程库网址的别名 分支
git pull origin review

- 切换到 review 分支上
- 命令: git checkout 分支名
git checkout review

- 将员工分支合并到 review 分支上
- 命令: git merge 有新内容分支名
git merge Yeung

- 解决合并冲突(省略) -> 前提是要有冲突
- 将 review 分支推送到远程库中
- 命令: git push 远程库网址的别名 分支
git push origin review

4. 将员工分支合并到 dev 分支上
- 注意: 分支合并最好 1-3 天合并一次,时间拖得越久,冲突文件就会越多
- 合并前提: 当员工分支的功能编写好后 或 组长已经审核过 review 分支上你所编写的功能
- 拉取远程库的 dev 分支
- 保证 dev 分支的内容是最新的
- 命令: git pull 远程库网址的别名 分支
git pull origin dev

- 切换到 dev 分支上
- 命令: git checkout 分支名
git checkout dev

- 将员工分支合并到 dev 分支上
- 命令: git merge 有新内容分支名
git merge Yeung

- 解决合并冲突(省略) -> 前提是要有冲突
- 将 dev 分支推送到远程库中
- 命令: git push 远程库网址的别名 分支
git push origin dev

4. 将 dev 分支合并到 master 分支上
- 合并前提: 当 dev 分支的项目开发完后
- 拉取远程库的 master 分支
- 命令: git pull 远程库网址的别名 分支
git pull origin master

- 拉取远程库的 dev 分支
- 保证 dev 分支的内容是最新的
- 命令: git pull 远程库网址的别名 分支
git pull origin dev

- 切换到 master 分支上
- 命令: git checkout 分支名
git checkout master

- 将 dev 分支合并到 master 分支上
- 命令: git merge 有新内容分支名
git merge dev

- 解决合并冲突(省略) -> 前提是要有冲突
- 将 master 分支推送到远程库中
- 命令: git push 远程库网址的别名 分支
git push origin master

与别人协作是发生冲突的解决办法
1. 与别人协作时发生冲突的解决办法
- 如果两个人都修改了同一个地方并且都提交到了远程库 那么远程库会保存先提交那个人的代码,反之另一个人会报错

- 先拉取远程库最新的代码
- 命令: git pull 远程库网址的别名 分支
git pull origin master

- 查看所有冲突文件
git diff --name-only --diff-filter=U

- 与别人沟通进行代码的修改


- 将修改好的代码提交到本地库

- 重新将修改好的代码推送到远程库
- 命令: git push 远程库网址的别名 分支
git push origin master


与别人协作时可能会发生的问题
1. 与别人协作时可能会发生的问题

- 当将项目推送到远程库的时候发生以上问题,那么有两种可能
- 可能一: 当前的本地库的版本低于远程库的版本(即: 在你不知情的情况下,有人将项目先推送到了远程库中)
- 解决方法: 重新拉取远程库的项目,然后再重新推送(如果你在旧版本的本地库中新建了某些文件,那么在拉取新版本的项目的时候,这些文件不会被删除)
- 可能二: 当前的本地库的版本低于远程库的版本,且项目中的某些文件与远程库中的文件内容发生冲突了
- 解决办法: 上面的 《与别人协作时发生冲突的解决办法》 有提及到
- 如何排查是那种可能性?
- 注意: 只有先拉取远程库最新版本的项目才能进行排查

- 方法一: 查看是否进入了手动合并模式

- 方法二: 查看是否有冲突文件(即: 查看所有的冲突文件)
git diff --name-only --diff-filter=U

跨团队的协作操作(公司与公司外程序员的协作)
1. 协作示意图

2. fork 项目经理的远程库到公司外其他团队远程库上


2. 克隆从项目经理远程库哪里frok过来得而库到本地 和 完成内容修改 最总提交到其他公司团队的远程库中

3. 将修改好的项目提交给项目经理的远程库让他进行审核



- 提交审核成功

4. 项目经理进行审核和合并






